"""
难度：简单
输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。
示例 1：
输入：target = 9
输出：[[2,3,4],[4,5]]
示例 2：
输入：target = 15
输出：[[1,2,3,4,5],[4,5,6],[7,8]]
限制：
1 <= target <= 10^5
"""
"""
滑动窗口求解。具体做法如下：
初始化窗口，令 left = 1，right = 2。
计算 sum = (left + right) * (right - left + 1) // 2。
如果 sum == target，时，将其加入答案数组中。
如果 sum < target 时，说明需要扩大窗口，则 right += 1。
如果 sum > target 时，说明需要缩小窗口，则 left += 1。
直到 left >= right 时停止，返回答案数组。
"""

from typing import List
class Solution:
    def findContinuousSequence(self, target: int) -> List[List[int]]:
        res = []
        # 滑动窗口
        left, right =1, 2
        while left < right:
            sum = (left + right ) * (right - left + 1)//2
            if sum == target:
                arr = []
                for i in range(0, right - left + 1):
                    arr.append(i + left)
                res.append(arr)
                left += 1
            elif sum < target:
                right += 1
            else:
                left += 1
        return res
